923C - Perfect Security - CodeForces Solution


data structures greedy strings trees *1800

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  const long long mxn = 32 * 3e5;
  vector<vector<long long>*> tr(mxn);
  long long n;
  cin >> n;
  vector<long long> a(n);
  for (long long i = 0; i < n; ++i) {
    cin >> a[i];
  }
  vector<long long> cnt(mxn);
  long long tot = 1;
  auto ins = [&](long long x) {
    long long p = 1;
    ++cnt[p];
    for (long long i = 30; i >= 0; --i) {
      long long b = (x >> i) & 1;
      if (!tr[p]) {
        tr[p] = new vector<long long>(2);
      }
      if (!(*tr[p])[b]) {
        (*tr[p])[b] = ++tot;
      }
      p = (*tr[p])[b];
      ++cnt[p];
    }
    ++cnt[p];
  };
  auto qry = [&](long long x) {
    long long p = 1;
    --cnt[p];
    long long res = 0;
    for (long long i = 30; i >= 0; --i) {
      long long b = (x >> i) & 1;
      if (!tr[p] || cnt[(*tr[p])[b]] <= 0) {
        p = (*tr[p])[!b];
        res += (1 << i);
      } else {
        p = (*tr[p])[b];
      }
      --cnt[p];
    }
    --cnt[p];
    return res;
  };
  for (long long i = 0; i < n; ++i) {
    long long b;
    cin >> b;
    ins(b);
  }
  for (long long i = 0; i < n; ++i) {
    cout << qry(a[i]) << ' ';
  }
  cout << '\n';
  return 0;
}
// CAxLUsqDnJpPQXAQrstkugFNFnVqwRmkpcjdPllHQrSPolOgdBlLCaaBEvtjmwnlRGgdiEHKoqJpbdSdPgDBBnzlGoPPSONjBSwzlqLlsiERiHgHgrEqwwpNgbiGfXoC


Comments

Submit
0 Comments
More Questions

1217. Minimum Cost to Move Chips to The Same Position
347. Top K Frequent Elements
1503. Last Moment Before All Ants Fall Out of a Plank
430. Flatten a Multilevel Doubly Linked List
1290. Convert Binary Number in a Linked List to Integer
1525. Number of Good Ways to Split a String
72. Edit Distance
563. Binary Tree Tilt
1306. Jump Game III
236. Lowest Common Ancestor of a Binary Tree
790. Domino and Tromino Tiling
878. Nth Magical Number
2099. Find Subsequence of Length K With the Largest Sum
1608A - Find Array
416. Partition Equal Subset Sum
1446. Consecutive Characters
1618A - Polycarp and Sums of Subsequences
1618B - Missing Bigram
938. Range Sum of BST
147. Insertion Sort List
310. Minimum Height Trees
2110. Number of Smooth Descent Periods of a Stock
2109. Adding Spaces to a String
2108. Find First Palindromic String in the Array
394. Decode String
902. Numbers At Most N Given Digit Set
221. Maximal Square
1200. Minimum Absolute Difference
1619B - Squares and Cubes
1619A - Square String